function Fn(name, age) {
	this.name = name;
	this.age = age;
	this.hobby = ["篮球", "足球"];
}
Fn.prototype.getName = function () {
	return this.name;
};
Fn.prototype.getAge = function () {
	return this.age;
};
Fn.prototype.getHobby = function () {
	return this.hobby;
};

function Child(name, age) {
	this.name = name;
	this.age = age;
}
/** 
 * 子类的原型指向父类的实例（原因：如果指向父类的prototype的话，若子类在原型对象上添加属性或方法时，同时也会增加父类上的属性或方法。
 * 但是如果是指向父类的实例的话，只是在这个实例上添加属性或方法，其他实例则不会拥有）
 */
Child.prototype = new Fn("zhangsan", 18);
Child.prototype.construtor = Child;

let child1 = new Child("lisi", 20);
let child2 = new Child("wangwu", 19);
child2.hobby[1] = "排球";
child2.age = 22;
console.log(child1.getName()); // lisi
console.log(child1.getAge()); // 20

console.log(child2.getName()); // wangwu
console.log(child2.getAge()); // 22

/**
 * 弊端：一个子类改变了父类的属性（引用类型）或方法，会导致其他的子类的属性或方法发生改变
 */
console.log(child1.getHobby()); // [ '篮球', '排球' ]
console.log(child2.getHobby()); // [ '篮球', '排球' ]
